/**
 * 
 */
package mm.back.dao;

import java.math.BigDecimal;
import java.util.List;

import mm.back.entity.Producto;
import mm.back.filtros.ProductosFiltro;
import mm.exceptions.MMGenericException;

/**
 * @author PUSDERKIS
 *
 */
public interface ProductoDAO {
	
	/**
	 * Guarda un producto. si no existe lo crea.
	 * @param prod el prdocuto a guardar.
	 * @throws MMGenericException en caso de error.
	 */
	void saveProducto(Producto prod) throws MMGenericException;
	
	/**
	 * Devuelve el listado de productos.
	 * @param activo si el producto esta o no activo.
	 * Si el parametro es NULL no lo toma en cuenta para la busqueda.
	 * @return el listado de productos.
	 * @throws MMGenericException en caso de error.
	 */
	List<Producto> getProductos(Boolean activo) throws MMGenericException;
	
	/**
	 * Devuelve el listado de productos.
	 * @param filtro contiene los criterios de busqueda.
	 * @return el listado de productos.
	 * @throws MMGenericException en caso de error.
	 */
	List<Producto> getProductos(ProductosFiltro filtro) throws MMGenericException;
	
	/**
	 * Resta stock del total.
	 * @param productoId el id del producto.
	 * @param cantidad la cantidad a disminuir.
	 * @throws MMGenericException en caso de error.
	 */
	Producto restarStock(Long productoId, BigDecimal cantidad) throws MMGenericException;
	
	/**
	 * Obtiene un producto por el id.
	 * @param idProducto el id del producto.
	 * @return el producto.
	 * @throws MMGenericException en caso de error.
	 */
	Producto getProducto(Long idProducto) throws MMGenericException;

	

}
